GCD ③ dispatch_barrier
全部标签 我在我的应用程序中同时使用了GCD和performSelectorOnMainThread:waitUntilDone,并且倾向于认为它们可以互换——也就是说,performSelectorOnMainThread:waitUntilDone是对GCDC语法的Obj-C包装器。我一直认为这两个命令是等效的:dispatch_sync(dispatch_get_main_queue(),^{[selfdoit:YES];});[selfperformSelectorOnMainThread:@selector(doit:)withObject:YESwaitUntilDone:YES];
我在我的应用程序中同时使用了GCD和performSelectorOnMainThread:waitUntilDone,并且倾向于认为它们可以互换——也就是说,performSelectorOnMainThread:waitUntilDone是对GCDC语法的Obj-C包装器。我一直认为这两个命令是等效的:dispatch_sync(dispatch_get_main_queue(),^{[selfdoit:YES];});[selfperformSelectorOnMainThread:@selector(doit:)withObject:YESwaitUntilDone:YES];
这个问题在这里已经有了答案:AssignavariableinsideaBlocktoavariableoutsideaBlock(8个回答)关闭9年前。在我的dispach_async代码block中,我无法访问全局变量。我收到此错误VariableisnotAssignable(missing_blocktypespecifier)。NSString*textString;dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,(unsignedlong)NULL),^(void){textS
这个问题在这里已经有了答案:AssignavariableinsideaBlocktoavariableoutsideaBlock(8个回答)关闭9年前。在我的dispach_async代码block中,我无法访问全局变量。我收到此错误VariableisnotAssignable(missing_blocktypespecifier)。NSString*textString;dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,(unsignedlong)NULL),^(void){textS
我有一个接受block和完成block的方法。第一个block应该在后台运行,而完成block应该在调用该方法的任何队列中运行。对于后者,我总是使用dispatch_get_current_queue(),但它似乎在iOS6或更高版本中已被弃用。我应该改用什么? 最佳答案 “在调用者所在的任何队列上运行”的模式很吸引人,但最终不是一个好主意。该队列可能是低优先级队列、主队列或其他具有奇怪属性的队列。我最喜欢的方法是说“完成block在具有以下属性的实现定义的队列上运行:x、y、z”,如果调用者想要更多控制权,则让block分派(di
我有一个接受block和完成block的方法。第一个block应该在后台运行,而完成block应该在调用该方法的任何队列中运行。对于后者,我总是使用dispatch_get_current_queue(),但它似乎在iOS6或更高版本中已被弃用。我应该改用什么? 最佳答案 “在调用者所在的任何队列上运行”的模式很吸引人,但最终不是一个好主意。该队列可能是低优先级队列、主队列或其他具有奇怪属性的队列。我最喜欢的方法是说“完成block在具有以下属性的实现定义的队列上运行:x、y、z”,如果调用者想要更多控制权,则让block分派(di
我有一个可能来自任何线程的回调。当我得到这个回调时,我想在主线程上执行某个任务。我是否需要检查我是否已经在主线程上-或者在调用下面的代码之前不执行此检查是否会受到任何惩罚?dispatch_async(dispatch_get_main_queue(),^{//doworkhere}); 最佳答案 不,你不需要检查你是否已经在主线程上。通过将block分派(dispatch)到主队列,您只是将block安排在主线程上串行执行,这发生在相应的运行循环运行时。如果你已经在主线程上,行为是一样的:block被调度,在主线程的runloop
我有一个可能来自任何线程的回调。当我得到这个回调时,我想在主线程上执行某个任务。我是否需要检查我是否已经在主线程上-或者在调用下面的代码之前不执行此检查是否会受到任何惩罚?dispatch_async(dispatch_get_main_queue(),^{//doworkhere}); 最佳答案 不,你不需要检查你是否已经在主线程上。通过将block分派(dispatch)到主队列,您只是将block安排在主线程上串行执行,这发生在相应的运行循环运行时。如果你已经在主线程上,行为是一样的:block被调度,在主线程的runloop
我对这段代码有疑问dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),^{NSData*data=[NSDatadataWithContentsOfURL:kLatestKivaLoansURL];[selfperformSelectorOnMainThread:@selector(fetchedData:)withObject:datawaitUntilDone:YES];});这段代码的第一个参数是dispatch_get_global_queue(DISPATCH_QUEUE_PR
我对这段代码有疑问dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),^{NSData*data=[NSDatadataWithContentsOfURL:kLatestKivaLoansURL];[selfperformSelectorOnMainThread:@selector(fetchedData:)withObject:datawaitUntilDone:YES];});这段代码的第一个参数是dispatch_get_global_queue(DISPATCH_QUEUE_PR